/***********************************************************************//**
 *   \file FilterTransfert.h		\author belot nicolas (karrakis)   
     \brief define Class FilterTransfert                                                   
    a base class for filter with Tranfert function                        
 ************************************************************************//*
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/


#ifndef FILTERTRANSFERT_H
#define FILTERTRANSFERT_H 1
#include "libtrckr.h"
#include <string>
#include <vector>

#include "Filter.h"
#include "Transfert.h"
using namespace std;
namespace libtrckr {
class FilterTransfert : public Filter , public Transfert {
	/** \class libtrckr::FilterTransfert
	\brief a base class for filter with Transfert function
	*/
	public:
		//Constructor
		/** Default Constructor
		*/
		FilterTransfert();
		//Filter(string);
		/** Copy constrtucor
		\param t the filter
		*/
		FilterTransfert( const FilterTransfert&);
		/** Constructor
			Create a FilterTransfert with a Transfert function
		\param t the Transfert function
		*/
		FilterTransfert( const Transfert&);

		//executor
		/** Apply the filter on data
		\param buffer the data
		\param size the size of the data
		\return the new data
		*/
		double* Preview(double*,int);//preview == execution  ?
		/** Apply the filter on data
		\param buf the data
		\return the new data
		*/
		Buffer& Preview(Buffer&);
		/** Initialize the Filter
		*/
		void Init( );
		/** Tune the Filter
		\param conf tuning parameter
		*/
		void Tune(DynArray<int>);
		/** Same as preview */
		double* Execution(double *,int);	
		/** Same as preview */
		Buffer& Execution(Buffer&);
		//Accessor
		/** Set the Y of the Transfert function
		\param Y vector with ys
		*/
		void setY(DynArray<double>);
		string HowToTune();

	private :
		DynArray<double> _y;

};

}

#endif

